package com.zenithmind.document.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zenithmind.document.pojo.dto.DocumentCreateDTO;
import com.zenithmind.document.pojo.dto.DocumentUpdateDTO;
import com.zenithmind.document.pojo.dto.DocumentUploadDTO;
import com.zenithmind.document.pojo.query.DocumentQueryDTO;
import com.zenithmind.document.pojo.vo.DocumentDetailVO;
import com.zenithmind.document.pojo.vo.DocumentStatisticsVO;
import com.zenithmind.document.pojo.vo.DocumentVO;

import java.util.List;

/**
 * 文档门面服务接口
 * 遵循接口隔离原则：只暴露客户端需要的方法
 * 遵循单一职责原则：专注于提供统一的文档服务入口
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface DocumentFacadeService {

    // ========== 基础文档操作 ==========
    
    /**
     * 上传文档
     */
    DocumentVO uploadDocument(DocumentUploadDTO uploadDTO);
    
    /**
     * 创建文档
     */
    DocumentVO createDocument(DocumentCreateDTO createDTO);
    
    /**
     * 更新文档
     */
    Boolean updateDocument(String id, DocumentUpdateDTO updateDTO);
    
    /**
     * 删除文档
     */
    Boolean deleteDocument(String id);
    
    /**
     * 获取文档详情
     */
    DocumentDetailVO getDocumentDetail(String id, String userId);
    
    /**
     * 分页查询文档
     */
    IPage<DocumentVO> getDocumentPage(DocumentQueryDTO queryDTO);
    
    // ========== 文档搜索 ==========
    
    /**
     * 搜索文档
     */
    List<DocumentVO> searchDocuments(String keyword, String userId, Integer limit);
    
    /**
     * 获取热门文档
     */
    List<DocumentVO> getHotDocuments(Integer limit);
    
    // ========== 文档处理 ==========
    
    /**
     * 转换文档格式
     */
    String convertDocument(String id, String targetFormat, String userId);
    
    /**
     * 下载文档
     */
    byte[] downloadDocument(String id, String userId);
    
    /**
     * 预览文档
     */
    String previewDocument(String id, String userId);
    
    // ========== 文档统计 ==========
    
    /**
     * 获取文档统计
     */
    DocumentStatisticsVO getDocumentStatistics(String documentId);
    
    /**
     * 记录文档访问
     */
    Boolean recordDocumentAccess(String documentId, String userId, String accessType);
    
    // ========== 权限管理 ==========
    
    /**
     * 检查文档权限
     */
    Boolean checkDocumentPermission(String documentId, String userId, String permission);
    
    /**
     * 验证文档所有权
     */
    Boolean validateDocumentOwnership(String documentId, String userId);
}
